home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Run Magazine ReRun 1985 Fall
/
rerun-1985-fall.d64
/
disk doctor
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-09-20
|
10KB
|
407 lines
1000 rem-----------------------
1010 rem- -
1020 rem- disk doctor -
1030 rem- -
1040 rem- by john tanzini -
1050 rem- -
1060 rem-----------------------
1070 print "[147]select a number.": print
1080 print "1. list directory": print
1090 print "2. restore a file": print
1100 print "3. pack directory": print
1110 print "4. list used blocks": print
1120 print "5. view or modify": print "block": print
1130 print "6. format disk": print
1140 print "7. send disk command": print
1150 print: print: print "press e to end."
1160 get kk$: if kk$="" then 1160
1170 if kk$="e" then print "[147]";: end
1180 kk = val(kk$)
1190 on kk gosub 1380, 1720, 2610, 3350, 3810, 4770, 4950
1200 goto 1070
1210 rem-----------------------------
1220 rem- -
1230 rem- disk error subroutine -
1240 rem- -
1250 rem-----------------------------
1260 print: print: print "**** disk error ****"
1270 print: print e1$;" ";e2$;" ";e3$;" ";e4$
1280 print: print "press any key to"
1290 print "return to menu"
1300 get k$: if k$="" then 1300
1310 return
1320 rem-----------------------------
1330 rem- -
1340 rem- part 1 -
1350 rem- list entire directory -
1360 rem- -
1370 rem-----------------------------
1380 open 15,8,15
1390 open 2,8,2,"#2"
1400 t = 18: s = 1: print "[147]"
1410 print#15,"u1:";2;8;t;s
1420 input#15, e1$, e2$, e3$, e4$
1430 if e1$<>"00" then gosub 1260: goto 1640
1440 print#15,"b-p:";2;0
1450 get#2,t$: get#2, s$
1460 for i = 2 to 226 step 32
1470 print#15,"b-p:";2;i
1480 get#2, a$: if a$="" then print "";
1490 get#2, a$: get#2, a$
1500 print "";
1510 for j = 1 to 16
1520 get#2, a$: print a$;
1530 next
1540 if a$<>"" then print: print
1550 get k$: if k$="" then 1590
1560 if k$="e" then 1640
1570 get k$: if k$="" then goto 1570
1580 if k$="e" then 1640
1590 next
1600 t = asc(t$+chr$(0)): s = asc(s$+chr$(0))
1610 if t>0 and t<36 then goto 1410
1620 print: print "press any key to": print "return to menu"
1630 get k$: if k$="" then 1630
1640 close 2: close 15
1650 return
1660 rem----------------------------
1670 rem- -
1680 rem- part 2
1690 rem- restore scratched file -
1700 rem- -
1710 rem----------------------------
1720 print "[147]enter name of file"
1730 input n1$
1740 print: print: print "is the file a"
1750 print: print "1. program"
1760 print: print "2. sequential file"
1770 get k$: if k$="1" then ft = 130: goto 1800
1780 if k$="2" then ft = 129: goto 1800
1790 goto 1770
1800 print: print: print "restoring"; n1$
1810 open 15,8,15
1820 open 2,8,2,"#0"
1830 open 3,8,3,"#1"
1840 gosub 2350: rem find file in directory
1850 if pt=0 then 2040; rem cannot restore
1860 print#15,"b-a:";0;pt;ps
1870 input#15,e1$,e2$,e3$,e4$
1880 if e1$<>"00" and e1$<>"65" then gosub 1260: return
1890 if e1$="65" then 2040: rem cannot restore
1900 print#15,"u1:";3;0;pt;ps
1910 lt = pt: ls = ps
1920 print#15,"b-p:";3;0
1930 get#3,pt$: get#3,ps$
1940 pt = asc(pt$+chr$(0)): ps = asc(ps$+chr$(0))
1950 if pt=0 then goto 2100: rem successful restore
1960 print#15,"b-a:";0;pt;ps
1970 input#15,e1$,e2$,e3$,e4$
1980 if e1$<>"65" and e1$<>"00" then gosub 1260: return
1990 if e1$="65" then 2180: rem partial restore
2000 goto 1900: rem read another block
2010 rem
2020 rem ----- cannot restore -----
2030 rem
2040 print: print: print "*** cannot ***"
2050 print "*** restore ***"
2060 goto 2280
2070 rem
2080 rem ----- successful restore -----
2090 rem
2100 print#15,"b-p:";2;dp
2110 print#2,chr$(ft);
2120 print#15,"u2:";2;0;t;s
2130 print: print: print "*** successful ***": print "*** restore ***"
2140 goto 2280
2150 rem
2160 rem ----- partial restore -----
2170 rem
2180 print#15,"b-p:";2;dp
2190 print#2,chr$(ft);
2200 print#15,"u2:";2;0;t;s
2210 print#15,"b-p:";3;0
2220 print#3,chr$(0);
2230 print#15,"b-p:";3;248
2240 for z = 1 to 8: print#3,chr$(0);: next
2250 print#15,"u2:";3;0;lt;ls
2260 print: print: print "*** partial ***"
2270 print "*** restore ***"
2280 print: print "press any key to": print "return to menu"
2290 get k$: if k$="" then goto 2290
2300 close 2: close 3: close 15
2310 return
2320 rem
2330 rem ---- find track and sector of file ----
2340 rem
2350 t = 18: s = 1
2360 print#15,"u1:";2;8;t;s
2370 input#15, e1$, e2$, e3$, e4$
2380 if e1$<>"00" then gosub 1260: pt = 0: goto 2540
2390 print#15,"b-p:";2;0
2400 get#2,t$: get#2, s$
2410 for i = 2 to 226 step 32
2420 print#15,"b-p:";2;i
2430 get#2, a$: if a$<>"" then 2500
2440 get#2, pt$: get#2, ps$
2450 n2$ = ""
2460 for j = 1 to 16
2470 get#2, a$: if a$<>chr$(160) then n2$=n2$+a$
2480 next
2490 if n1$=n2$ then pt = asc(pt$+chr$(0)): ps = asc(ps$+chr$(0)): dp = i: return
2500 next
2510 t = asc(t$+chr$(0)): s = asc(s$+chr$(0))
2520 if t>0 and t<36 then goto 2360
2530 pt = 0
2540 return
2550 rem----------------------
2560 rem- -
2570 rem- part 3 -
2580 rem- pack directory -
2590 rem- -
2600 rem----------------------
2610 print "[147]is correct disk in": print "drive? (y/n)
2620 [161] k$: [139] k$[178]"" [167] 2620
2630 [139] k$[179][177]"y" [167] [142]
2640 [153]: [153]: [153]
2650 [153] "*************"
2660 [153] "* packing *
2670 print "*************"
2680 open 15,8,15
2690 open 2,8,2,"#0"
2700 open 3,8,3,"#1"
2710 rt = 18: rs = 1
2720 wt = 18: ws = 1
2730 lt = 0
2740 df = 0
2750 ef = 0
2760 gosub 3060: rem next-write-block
2770 if ef=1 then 3010
2780 gosub 3220: rem next-read-block
2790 if ef=1 then 3010
2800 for ri = 2 to 226 step 32
2810 print#15, "b-p:";3;ri
2820 get#3, ft$
2830 if ft$="" then 2920
2840 if wi>255 then gosub 3060: rem next-write-block
2850 if ef=1 then 3010
2860 print#15, "b-p:";2;wi
2870 print#2, ft$;
2880 for i = 1 to 29
2890 get#3, a$: print#2, left$(a$+chr$(0),1);
2900 next i
2910 wi = wi + 32
2920 next ri
2930 if rt<>0 then 2780
2940 if wi<255 then goto 2970
2950 gosub 3060: rem next-write-block
2960 if df = 1 then 3010
2970 print#15, "b-p:";2;wi
2980 print#2,chr$(0);
2990 wi = wi + 32
3000 goto 2940
3010 close 2: close 3: close 15
3020 return
3030 rem
3040 rem ---- next-write-block ----
3050 rem
3060 if lt<>0 then print#15, "u2:";2;0;lt;ls
3070 input#15, e1$, e2$, e3$, e4$
3080 if e1$<>"00" then ef=1: gosub 1260: return
3090 lt = wt: ls = ws
3100 if wt=0 then df = 1: return
3110 print#15, "u1:";2;0;wt;ws
3120 input#15, e1$, e2$, e3$, e4$
3130 if e1$<>"00" then ef=1: gosub 1260: return
3140 print#15, "b-p:";2;0
3150 get#2, wt$: get#2, ws$
3160 wt = asc(wt$+chr$(0)): ws = asc(ws$+chr$(0))
3170 wi = 2
3180 return
3190 rem
3200 rem ---- next-read-block ----
3210 rem
3220 print#15,"u1:";3;0;rt;rs
3230 input#15, e1$, e2$, e3$, e4$
3240 if e1$<>"00" then ef=1: gosub 1260: return
3250 print#15, "b=p:";3;0
3260 get#3, rt$: get#3, rs$
3270 rt = asc(rt$+chr$(0)): rs = asc(rs$+chr$(0))
3280 return
3290 rem---------------------------
3300 rem- -
3310 rem- part 4 -
3320 rem- list allocated blocks -
3330 rem- -
3340 rem---------------------------
3350 if lf=0 then dim bm%(35,4): lf = 1
3360 print "[147]"; tab(4); "track"; tab(10); "sector": print
3370 open 15,8,15
3380 open 2,8,2,"#0"
3390 print#15, "u1:";2;0;18;0
3400 input#15, e1$, e2$, e3$, e4$
3410 if e1$<>"00" then gosub 1260: goto 3720
3420 print#15, "b-p:";2;4
3430 for t = 1 to 35
3440 for j = 0 to 3
3450 get#2, a$
3460 bm%(t,j) = asc(a$+chr$(0))
3470 next j, t
3480 restore
3490 nb = 0
3500 for n = 1 to 4
3510 read t1, t2, ns
3520 for t = t1 to t2
3530 if t<>18 then nb = nb + bm%(t,0)
3540 if bm%(t,0)=ns then 3680
3550 s = 0
3560 for i = 1 to 3
3570 b2 = bm%(t,i)
3580 for j = 1 to 8
3590 b1 = b2/2: b2 = int(b1)
3600 if b1=b2 then print tab(4); t; tab(11); s
3610 get k$: if k$="" then 3650
3620 if k$="e" then 3720
3630 get k$: if k$="" then 3630
3640 if k$="e" then 3720
3650 s = s + 1
3660 if s=ns then 3680
3670 next j, i
3680 next t, n
3690 print: print nb; "blocks free.": print
3700 print: print "press any key to": print "return to menu"
3710 get k$: if k$="" th